package com.tigercel.xiangchengyun.utils;

import android.graphics.drawable.Drawable;
import android.os.Build;
import android.view.View;
import android.widget.TextView;

import org.json.JSONException;
import org.json.JSONObject;

import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.regex.Pattern;

public class Util {
    private static final String TAG = Util.class.getSimpleName();

    /**
     * 判断给定字符串是否空白串。 空白串是指由空格、制表符、回车符、换行符组成的字符串 若输入字符串为null或空字符串，返回true
     *
     * @param input
     * @return boolean
     */
    public static boolean isEmpty(String input) {
        if (input == null || "".equals(input))
            return true;

        for (int i = 0; i < input.length(); i++) {
            char c = input.charAt(i);
            if (c != ' ' && c != '\t' && c != '\r' && c != '\n') {
                return false;
            }
        }
        return true;
    }

    /**
     * 字符串转整数
     *
     * @param str
     * @param defValue
     * @return
     */
    public static int toInt(String str, int defValue) {
        try {
            return Integer.parseInt(str);
        } catch (Exception e) {
        }
        return defValue;
    }

    /**
     * 对象转整数
     *
     * @param obj
     * @return 转换异常返回 0
     */
    public static int toInt(Object obj) {
        if (obj == null)
            return 0;
        return toInt(obj.toString(), 0);
    }

    /**
     * 对象转整数
     *
     * @param obj
     * @return 转换异常返回 0
     */
    public static long toLong(String obj) {
        try {
            return Long.parseLong(obj);
        } catch (Exception e) {
        }
        return 0;
    }

    /**
     * 字符串转布尔值
     *
     * @param b
     * @return 转换异常返回 false
     */
    public static boolean toBool(String b) {
        try {
            return Boolean.parseBoolean(b);
        } catch (Exception e) {
        }
        return false;
    }

    /**
     * 验证手机号码
     */
    public static boolean isMobileNO(String mobiles) {
        if (mobiles == null) {
            return false;
        }
        //((\+86)|(86))?
        return Pattern.compile("^1\\d{10}$").matcher(mobiles).matches();
    }

    /**
     * @return 是否为数字串, 包括正、负、小数
     */
    public static boolean isDigit(String str) {
        if (str == null) {
            return false;
        }
        Pattern pattern = Pattern.compile("-?[0-9]+\\.*[0-9]*");
        return pattern.matcher(str).matches();
    }

    public static boolean isEmail(String str) {
        if (str == null) {
            return false;
        }
        Pattern pattern = Pattern.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
        return pattern.matcher(str).matches();
    }

    /**
     * 获取json命令串
     */
    public static String getJsonString(String[] keys, Object[] values) {
        if (keys.length != values.length) {
            return null;
        }

        JSONObject member = new JSONObject();
        try {
            for (int i = 0; i < keys.length; i++) {
                if (values[i] == null) {
                    continue;
                }
                member.put(keys[i], values[i]);
            }

            return member.toString();
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 获取Editext中字符串
     */
    public static String getText(TextView textView) {
        if (textView == null) {
            return null;
        }

        String text = textView.getText().toString().trim();
        if ("".equals(text)) {
            return null;
        }
        return text;
    }

    public static String formatTime(long time, String format) {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        Date d = new Date(time);
        return sdf.format(d);
    }

    /**
     * 判断集合是否为null或者0个元素
     *
     * @param c
     * @return
     */
    public static boolean isNullOrEmpty(Collection c) {
        if (null == c || c.isEmpty()) {
            return true;
        }
        return false;
    }

    /**
     * 兼容sdk 16以下的版本背景设置方法
     *
     * @param v 目标view
     * @param d 背景图片
     */
    @SuppressWarnings("deprecation")
    public static void setBackgroundCompatible(View v, Drawable d) {
        if (Build.VERSION.SDK_INT < 16) {
            v.setBackgroundDrawable(d);
        } else {
            v.setBackground(d);
        }
    }

    /**
     * 如果为图片则去除后缀
     */
    public static String getSimpleNameOfPic(String name) {
        if (name == null) {
            return null;
        }
        if (name.indexOf(".") > 0) {
            if (name.contains(".png")) {
                name = name.substring(0, name.indexOf(".png"));
            } else if (name.contains(".jpg")) {
                name = name.substring(0, name.indexOf(".jpg"));
            }
        }
        return name;
    }

    public static String intToIp(int ip) {
        return (ip & 0xFF ) + "." +
                ((ip >> 8 ) & 0xFF) + "." +
                ((ip >> 16 ) & 0xFF) + "." +
                (ip >> 24 & 0xFF);
    }
}
